import axios from "axios";
import qs from "qs";
import { isObject } from "./index";

// 定义错误信息
const errorStatusDesc = {
  _400: "未能获取有效服务, 请稍后重试",
  _401: "身份信息异常, 请尝试重新登陆",
  _404: "请求的服务异常, 请稍后重试或联系管理员",
  _500: "内部服务器异常, 请刷新或稍后重试",
  _502: "返回数据无效, 请稍后重试或联系管理员",
  _503: "服务器响应超时, 请稍后重试",
  _504: "网络超时, 请检查网络或稍后重试",
  _999: "服务异常，请联系管理员或稍后重试",
};

/**
 * 错误信息处理方法
 * @param {*} error
 * @returns
 */
const checkErrorMessage = (error) => {
  const message = error.message || error.Message;
  if (!message || typeof message !== "string") {
    return errorStatusDesc["_999"];
  }

  const errorCode = message.match(/\d{3}/g)[0];
  if (!errorCode || errorCode > 504) {
    return errorStatusDesc["_999"];
  }
  const errorMessage = errorStatusDesc["_" + errorCode];
  return errorMessage || errorStatusDesc["_999"];
};

/**
 * 与响应拦截一样，我们需要在这里对api的状态再次进行过滤
 * 需要注意的是，这里的状态要根据你们将来的api返回状态进行调整
 * @param {*} res
 * @param {*} rej
 * @param {*} result
 * @returns
 */
function checkApiError(reslove, reject, result) {
  // console.log(result);
  // if (result.info.seed) {
  //   return reslove(result.results);
  // }
  // reject(result);
  // return reslove(result);

  if (result || result.code === 0) {
    return reslove(result.data);
  }
  reject(result);
}

function checkApiError1(reslove, reject, result) {
  console.log(result);
  if (result.info.seed) {
    return reslove(result.results);
  }
  reject(result);
}

const instance = axios.create({
  timeout: 20000,
});

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    const newConfig = Object.assign({}, config, {
      headers: {
        "access-token": "token",
        "Content-Type": "application/x-www-form-urlencoded",
      },
    });
    return newConfig;
  },
  function (error) {
    // 对请求错误做些什么

    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response.data;
  },
  function (error) {
    // 对响应错误做点什么

    console.log(checkErrorMessage(error));
    return Promise.reject(error);
  }
);

export function post(url, data) {
  console.log(url, qs.stringify(data));
  return new Promise((reslove, reject) => {
    instance
      .post(url, isObject(data) ? qs.stringify(data) : data)
      .then((res) => {
        console.log(res);
        checkApiError(reslove, reject, res);
      })
      .catch((err) => {
        console.log(err);
      });
  });
}

export function get(url, data) {
  return new Promise((reslove, reject) => {
    instance
      .get(url, { parmas: qs.stringify(data) })
      .then((res) => {
        checkApiError(reslove, reject, res);
      })
      .catch((err) => {
        console.log(err);
      });
  });
}

export function get1(url, data) {
  return new Promise((reslove, reject) => {
    instance
      .get(url, { parmas: qs.stringify(data) })
      .then((res) => {
        checkApiError1(reslove, reject, res);
      })
      .catch((err) => {
        console.log(err);
      });
  });
}
// export { post, get };
export default instance;
